package com.ytjj.qmyx.mall.service;

import com.ytjj.common.api.CommonPage;
import com.ytjj.common.api.CommonResult;
import com.ytjj.common.model.UsersResponse;
import com.ytjj.qmyx.mall.model.*;
import com.ytjj.qmyx.mall.model.request.*;
import com.ytjj.qmyx.mall.model.response.*;
import com.ytjj.qmyx.mall.model.vo.DynamicVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 动态服务接口
 *
 *
 * @version 1.0
 *
 */
public interface DynamicService {

    /**
     * 根据用户获取动态列表
     *
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<DynamicResponse> getDynamicListByUserId(Integer userId, Integer pageNum, Integer pageSize);

    /**
     * 获取用户所有的测评id
     * @param userId
     * @return
     */
    List<Dynamic> getDynamicIdsByUserId(Integer userId);

    /**
     * 获取商品id查询所以测评
     * @param productId
     * @return
     */
    List<Dynamic> getDynamicIdsById(Integer productId);

    List<DynamicVO> getDynamicIdsByVOId(Integer productId);

    /**
     * 根据专栏获取动态列表
     *
     * @param specialId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<DynamicResponse> getDynamicListBySpecialId(Integer specialId, Integer pageNum, Integer pageSize);

    List<DynamicResponse> getMyDynamicInfos(Integer dynamicId, Integer userId, Integer ortherUserId, Integer pageNum, Integer pageSize);

    /**
     * 获取动态页
     *
     * @return
     */
    DynamicPageResponse getDynamicPage();

    CommunityPageResponse getCommunityPage();

    /**
     * 社区动态列表（h5）
     * @param dynamicEsRequest
     * @return
     */
    List<DynamicEsResponse> getEsDynamicList(DynamicEsRequest dynamicEsRequest);

    /**
     * 社区动态列表 app/小程序
     * @param dynamicEsRequest
     * @return
     */
    List<DynamicEsResponse> getEsDynamicList(DynamicEsRequest dynamicEsRequest, Integer userId);

    /**
     * 动态详细信息（h5）
     * @param dynamicEsRequest
     * @return
     */
    List<DynamicEsResponse> getEsDynamicInfos(DynamicEsRequest dynamicEsRequest);

    /**
     * 动态详情信息 app/小程序
     * @param dynamicEsRequest
     * @param userId
     * @return
     */
    List<DynamicEsResponse> getEsDynamicInfos(DynamicEsRequest dynamicEsRequest, Integer userId);

    /**
     * 动态信息
     *
     * @param dynamicId
     * @return
     */
    DynamicResponse getDynamicInfo(Integer dynamicId);

    /**
     * 动态评价
     *
     * @param dynamicId
     * @return
     */
    List<DynamicCommentResponse> getDynamicComment(Integer dynamicId, Integer pid);

    /**
     * 是否点赞
     *
     * @param dynamicId
     * @param userId
     * @return 0 否 1 是
     */
    Integer isLike(Integer dynamicId, Integer userId);

    /**
     * 点赞数
     *
     * @param dynamicId
     * @param userId
     * @return 0 否 1 是
     */
    Integer countLike(Integer dynamicId, Integer userId);

    /**
     * 点赞
     *
     * @param dynamicId
     * @param id
     */
    void like(Integer dynamicId, Integer id);

    /**
     * 取消点赞
     *
     * @param dynamicId
     * @param id
     */
    void cancelLike(Integer dynamicId, Integer id);

    /**
     * 是否点赞评论
     *
     * @return 0 否 1 是
     */
    Integer isLikeComment(Integer dynamicCommentId, Integer userId);

    /**
     * 点赞评论数
     *
     * @return 0 否 1 是
     */
    Integer countLikeComment(Integer dynamicCommentId, Integer userId);

    /**
     * 点赞评论
     *
     */
    void likeComment(Integer dynamicCommentId, Integer userId);

    /**
     * 取消点赞评论
     *
     */
    void cancelLikeComment(Integer dynamicCommentId, Integer userId);

    /**
     * 添加评论
     *
     * @param request
     */
    int addComment(CommentRequest request);

    /**
     * 获取达人动态列表
     *
     * @param expertId
     * @return
     */
    ExpertDynamicResponse getExpertDynamicList(Integer expertId);

    /**
     * 发布动态
     *
     * @param request
     */
    void issueDynamic(IssueDynamicRequest request);


    /**
     * 获取H5动态主页
     *
     * @return
     */
    H5DynamicResponse getH5DynamicList();

    /**
     * 根据类型获取banner
     *
     * @param type
     * @return
     */
    BannersResponse getBannersInfoByType(@Param("type") String type);

    /**
     * 获取社区用户信息
     *
     * @return
     */
    DynamicExpertUserInfoResponse getH5ExpertInfoById(Integer userId);

    /**
     * 分页获取动态视频列表
     *
     * @param dynamicRequest
     * @return
     */
    List<DynamicResponse> getH5DynamicVideoList(DynamicRequest dynamicRequest);


    /**
     * 获取直播商品列表
     *
     * @return
     */
    List<Product> getLiveProductList();

    /**
     * 获取动态列表
     *
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     */
    Object getDynamicsList(String type, Integer pageNum, Integer pageSize);

    void saveBrowsingHistory(BrowsingHistoryRequest browsingHistoryRequest, Integer userId,String type);

    /**
     * 发布购物清单动态
     *
     * @param shippingDynamicRequest
     */
    DynamicResponse publishShippingDynamic(ShippingDynamicRequest shippingDynamicRequest, UsersResponse usersResponse);

    DynamicDto getDynamicById(Integer dynamicId);

    /**
     * 查询用户动态数
     * @param userId
     * @return
     */
    Integer getDynamicCountByUserId(Integer userId);

    Integer getDynamicCountByUserId(Integer userId, Integer status);

    /**
     * 获取他人的动态列表
     *
     * @param userId
     * @return
     */
    List<DynamicResponse> getOthersDynamicList(Integer userId, Integer pageSize, Integer pageNum);

    DynamicCommentResponse addCommentV2(CommentRequest request, UsersResponse currentUser);

    Integer countComment(Integer dynamicId);

    Integer talentDynamicNum(Integer userId);


    List<DynamicVO> getDynamicBySpecialId(Integer specialId);

    CommonResult getFiveSuperiorDynamic();

    /**
    * 获得评论列表
    * v4.2.2
    * @param dynamicCommentRequest:
    * @returns: com.ytjj.common.api.CommonPage<com.ytjj.qmyx.mall.model.response.DynamicCommentResponse>
    * 
    */
    Map<String,Object> getDynamicComments(DynamicCommentRequest dynamicCommentRequest);

    /**
    * 获得评论的回复列表
    * v4.2.2
    * @param dynamicCommentReplyRequest:
    * @returns: com.ytjj.common.api.CommonPage<com.ytjj.qmyx.mall.model.response.DynamicCommentReplyResponse>
    * 
    */
    CommonPage<DynamicCommentReplyResponse> getDynamicCommentReplys(DynamicCommentReplyRequest dynamicCommentReplyRequest);

    /**
    * 添加评论
    * v4.2.2
    * @param dynamicCommentRequest:
    * @returns: int
    * 
    */
    DynamicCommentResponse addCommentForDynamic(DynamicCommentRequest dynamicCommentRequest);

    /**
     * 添加回复
     * v4.2.2
     * @param dynamicCommentReplyRequest:
     * @returns: int
     * 
     */
    DynamicCommentReplyResponse addCommentReply(DynamicCommentReplyRequest dynamicCommentReplyRequest);

    /**
    * 当前用户是否已点赞
    * @param id:主键
    * @param type:类型 0-评论 1-回复
    * @param dynamicId:动态Id
    * @returns: int
    * 
    */
    boolean isClickLike(Integer id,Integer type,Integer dynamicId,Integer userId);

    /**
    * 给评论点赞
    * v4.2.2
    * @param type:类型 0-评论 1-回复
    * @param id: 评论或回复id
    * @param userId: 当前登录用户的id
    * @param dynamicId: 当前动态id
    * @returns: int
    * 
    */
    boolean clickLike(Integer type,Integer id,Integer userId,Integer dynamicId);

    /**
    * 相关测评推荐
    * v4.2.2
    * @param id:
    * @returns: java.util.List<com.ytjj.qmyx.mall.model.DynamicDto>
    * 
    */
    List<DynamicVO> relatedDynamicRecommend(Integer id);
}
